<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 运算符的扩展
        // es6之扩展运算符 三个点（...）

        //1. 对象的扩展运算符
        // 声明一个对象stu1，内有三个属性
        let stu1 = {name:'李四',age:22,sex:'男'};
        // 要求：将stu1复制出一个新对象
        //let stu2 = {name:stu1.name,age:stu1.age ,sex: stu1.sex};
        // 将上面代码使用 ... 扩展运算符，变成如下写法。
        let stu2 = {...stu1};

        stu2.name = "王五";

        console.log(stu1 === stu2);
        console.log(stu1);
        console.log(stu2);

        //2. 数组的扩展运算符
        const arr1 = [10,20,30,40,50];
        // 将数组arr1通过扩展运算符...将其复制一份
        const arr2 = [...arr1];
        console.log(arr1 === arr2);
        console.log(arr1);
        console.log(arr2);
        
        //3. 剩余参数的处理（如：函数的参数）
        // 自定义计算所有参数累加值的函数
        function add(){
            // 通过arguments 参数对象来实现所有参数的累加
            let res = 0;
            for(let i = 0; i< arguments.length; i++){
                res += arguments[i];
            }
            return res;
        }

        console.log(add(10,20,30));
        console.log(add(1,2,3,4,5,6,7,8,9,10));

        let a = [10,20,30,40,50];
        console.log(add(...a));


        console.log("=".repeat(40));

        // 自定义计算指定数组的累加值函数
        function add2(...arr){
            let res = 0;
            for(let i = 0; i< arr.length; i++){
                res += arr[i];
            }
            return res;
        } 
        console.log(add2(10,20,30));
        console.log(add2(1,2,3,4,5,6,7,8,9,10));


        // 解构赋值
        let a2 = [10,20,30,40,50];
        // 快速从数组a2中取前两个值，剩余给第三个变量
        let [x,y,...z] = a2;
        console.log(x, y, z);

    </script>
</body>
</html>